package day9;

import java.util.Arrays;

//Lambda表达式，实现Arrays。sort排序，手写排序顺序
public class Demo {
    public static void main(String[] args) {
        Integer nums[]={1,3,5,8,2,9};
        System.out.println(Arrays.toString(nums));
        //默认升序，如果想换排序规则，需要比较器对象
        //比较器对象：Comparator 外部比较器
        //java中的泛型不能写基本类型
        //
        //Comparator<Integer> c=(o1,o2)->(01-02);

        Arrays.sort(nums,(o1,o2)->o2-o1);
        System.out.println(Arrays.toString(nums));

        Student s=new Student();
        Student[] stus={new Student(10,"张三",80),
                        new Student(2,"李四",90),
                        new Student(4,"王五",60),
                        new Student(13,"李四",90),
                        new Student(14,"星星",100)
        };
        //排序规则：先针对学生成绩降序排序，如果学号相同，按照学号升序排序
        System.out.println(Arrays.toString(stus));
        //因为默认的工具类方法，无法对对象进行排序，因为不知道排序规则
        Arrays.sort(stus,(o1,o2)->{
            int result=(int)(o1.score-o2.score);
            //针对于成绩属性做降序排序的规则
            if (result==0){
                result= o1.id- o2.id ;
            }
            return result;
        });
        System.out.println(Arrays.toString(stus));
    }
}

class Student{
    int id;
    String name;
    double score;
    //java中一般情况下提供了
    public Student(){

    }
    public Student(int id, String name, double score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }
    //java打印的是引用类型，默认打印引用地址（通过祖先类Object类toString方法得到的）
    //重写toString，父类打印地址的toString就失效了
    public String toString(){
        return id+" "+name+" "+score;
    }
}